package org.dromara.quick.chat.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.quick.chat.domain.ImFriends;
import org.dromara.quick.chat.model.bo.query.ImFriendsBo;
import org.dromara.quick.chat.model.bo.query.SettingsFriendsBo;
import org.dromara.quick.chat.model.statics.FriendsGroupStatics;
import org.dromara.quick.chat.model.vo.FriendsDetailVO;
import org.dromara.quick.chat.model.vo.ImFriendsChatVO;
import org.dromara.quick.chat.model.vo.ImFriendsSearchVO;
import org.dromara.quick.chat.model.vo.ImFriendsVO;
import org.dromara.system.api.domain.vo.RemoteUserBasicVO;
import org.springframework.web.bind.annotation.RequestBody;

import java.io.IOException;
import java.util.List;

/**
* @author Stars
* @description 针对表【im_friends(好友表（通讯录），记录用户之间的好友关系及相关设置)】的数据库操作Service
* @createDate 2025-03-04 22:33:21
*/
public interface ImFriendsService extends IService<ImFriends> {



    /**
     * 查询通讯录记录
     */
    List<ImFriendsVO> selectFriendsList(ImFriendsBo imFriendsBo, PageQuery pageQuery);

    /**
     * 统计临时好友数量和总好友数量
     */
    FriendsGroupStatics selectFriendsCount();

    /**
     * 通讯录-好友详细
     */
    FriendsDetailVO selectFriendsDetail(ImFriendsBo imFriendsBo);

    /**
     * 聊天框页面查询通讯录信息
     * @param receiverId 对方的id
     * @return
     */
    ImFriendsChatVO selectFriendsChat(Long receiverId);



    /**
     * 设置通讯录基本信息
     */
    void settingsFriends(@RequestBody SettingsFriendsBo settingsFriendsBo);

    /**
     * 加入黑名单、移除黑名单。根据原来的判断，原来是黑名单，那么就移除。原来是正常用户就加入黑名单
     */
    void removeBlackAddBlacklistFriends(Long receiverId) throws IOException;

    /**
     * 删除好友
     */
    void deleteFriends(Long receiverId);

    /**
     * 同意添加通讯录
     */
    void agreeAddFriend(Long userId,Long friendsId) ;

    /**
     * 根据用户编号或者群编号查询
     * <p>
     *     用户编号不为空，查询用户，如果用户编号为空，群编号不为空，查询群
     * </p>
     * @param receiverId 接受者id
     * @return
     */
    RemoteUserBasicVO selectFriendInfoOne(Long receiverId);


    /**
     * 扫码查找好友
     * @param code 用户的临时码
     * @return
     */
    ImFriendsSearchVO searchFriend(String code) ;

    /**
     * 底部tab栏-》我的
     * 动态、相册信息
     */
    ImFriendsSearchVO tabMy() ;

    /**
     * 用户生成口令
     */
    String generateCode();

    /**
     * 根据口令查询用户id
     */
    String searchCode(String code) ;
}
